/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.notaria.guerrasalas.bc;

import com.notaria.guerrasalas.be.ClienteNatural;
import com.notaria.guerrasalas.be.Persona;
import gob.satt.comun.jpa.Command;
import javax.persistence.EntityManager;

/**
 *
 * @author Administrador
 */
public class ActualizarPersonaAClienteJuridicoCommand implements Command<Boolean> {

    private Persona persona;
    private String nacionalidad;
    private ClienteNatural clienteNatural;

    public ActualizarPersonaAClienteJuridicoCommand(Persona persona, String nacionalidad, ClienteNatural clienteNatural) {
        this.persona = persona;
        this.nacionalidad = nacionalidad;
        this.clienteNatural = clienteNatural;
    }

    @Override
    public Boolean execute(EntityManager em) throws Exception {
        try {
            int r = em.createNativeQuery("UPDATE PERSONA SET XTIPO='CN', ES_EMPLEADO = ?1 WHERE ID_PERSONA = ?2")
                    .setParameter(1, persona.isEsEmpleado())
                    .setParameter(2, persona.getIdPersona())
                    .executeUpdate();
            if (r > 0) {
                r = em.createNativeQuery("INSERT INTO CLIENTE (ID_PERSONA,NACIONALIDAD) VALUES(?1,?2)")
                        .setParameter(1, persona.getIdPersona())
                        .setParameter(2, nacionalidad)
                        .executeUpdate();
                if (r > 0) {
                    if (r > 0) {
                        r = em.createNativeQuery("INSERT INTO CLIENTE_NATURAL (ID_CLIENTE_NATURAL,DOCUMENTO_IDENTIDAD,TIPO_DOCUMENTO_IDENTIDAD,ESTADO_CIVIL,OCUPACION) VALUES(?1,?2,?3,?4,?5)")
                            .setParameter(1, persona.getIdPersona())
                            .setParameter(2, clienteNatural.getDocumentoIdentidad())
                            .setParameter(3, clienteNatural.getTipoDocumentoIdentidad().ordinal())
                            .setParameter(4, clienteNatural.getEstadoCivil().ordinal())
                            .setParameter(5, clienteNatural.getOcupacion())
                            .executeUpdate();
                        return true;
                    } else {
                        return false;
                    }

                } else {
                    return false;
                }
            } else {
                return false;
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
